home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 73
/
PCMania CD73_1.iso
/
pcmania
/
render73
/
Taller
/
castli17
/
CASTLE20.INC
< prev
next >
Wrap
Text File
|
1998-01-04
|
52KB
|
1,495 lines
/* Este fichero es la versión 2.0 de Castlib: una libreria de formas para la
creación de castillos con POV 3.0. La presente versión de este
"producto" puede ser utilizada libremente por cualquiera, pero dicho uso
implica la aceptación de las siguientes condiciones:
1) Si alguien emplea alguna de las estructuras de Castlib 2.0 debera
indicarlo asi al principio de su fichero escenico citando tambien el
nombre de su autor.
2) Si alguien realiza alguna modificación sobre los ficheros que componen
Castlib 2.0, debera citar el producto original y su procedencia e indicar
que lo utilizado es una mutación de Castlib.
3) Este producto no es shareware sino de PAGO. Si lo utilizas y algun
dia, casualmente o no, topas con el autor de Castlib, quedaras obligado a
invitar a dicho autor a una caña mientras le explicas como has utilizado
su producto.
4) El autor rechaza cualquier responsabilidad por cualquier desastre
informatico, neurologico, o de cualquier otro tipo que el uso de este
producto pudiera ocasionar a cualquier ser pensante con una capacidad
mental superior a la de una piedra. Se entiende asimismo que el usuario
renuncia a cualquier pretensión de reclamación, ahora y siempre, en este
o en cualquier otro universo (paralelo o no), sin excepción espacial ni
temporal, y liberando al autor en parte y en todo de cualquier obligación
futura.
5) La clausula 4 tambien se aplica a las entidades integrantes de
cualquier universo o entorno virtual simulado en cualquier sistema con
capacidad de procesamiento superior al de un abaco.
6) El uso de este producto y el incumplimiento de estas clausulas sera
castigado con medidas judiciales y ostracismo en PCmania. */
#include "shapes.inc"
#include "colors.inc"
#include "textures.inc"
#include "woods.inc"
#include "metals.inc"
/* castle20.inc comienza definiendo las estructuras de mas bajo nivel
necesarias para la construcción de castillos, o sea: puertas, ventanas,
almenas, etc. Luego siguen objetos de "mayor nivel" como muros, torres,
etc, que emplean los elementos simples ya definidos. Siguira la
definición de construcciones mas complejas; grupos de torres, alas
enteras del castillo, etc. Finalmente la definición de la escena, donde
se indican las estructuras empleadas, su posición, la camara, etc, esta
en el fichero .pov de cada escena.
Las unidades empleadas son decimetros */
#declare textmur1 = texture{ // piedra de los componentes de las casas
// pigment{image_map{tga "piedra3.tga" }}
pigment{Orange}
}
#declare textmur2 = texture{ // piedra de castillo
// pigment{image_map{tga "textur2.tga"}}
pigment{Orange}
}
#declare texcastle= texture{ //piedra de muro de castillo
/* pigment{image_map{tga "text1.tga" map_type 0} scale <14,14,1>}
finish {
ambient 0.10
diffuse 1
} */
pigment{Orange}
}
#declare texcastle1= texture{ //piedra multicolor de las casas
// pigment{image_map{tga "piedras2.tga" map_type 0}}
/* pigment{image_map{tga "piedras3.tga" map_type 0}}
finish {
ambient 0.10
diffuse 1
}
translate <-.5,-.5,0> scale <14,14,1> */
pigment{Orange}
}
// piedra usada para techos de torre, escaleras y otros elementos sueltos
#declare texcastle2= texture{
/* pigment{image_map{tga "piedra22.tga" map_type 0} scale <14,14,1>}
finish {
ambient 0.10
diffuse 1
} */
pigment{Orange}
}
#declare T17 = texture { T_Wood17 }
// Aqui estan las construcciones de puertas y ventanas normales
// siguen las construcciones utilizadas como marcos de ventanas y puertas
#declare marcopi=prism{linear_sweep
linear_spline
0,10
60,
<-10,-20>, <-10,-14.10>, <-15,-14.10>,
<-16,-15>, <-16,-19>, <-15,-20>, <-10,-20>
<-10,-13.90>, <-10,-8>, <-11,-7.10>, <-16,-7.10>,
<-17,-8>, <-18,-11>, <-17,-13>, <-15,-13.90>, <-10,-13.90>
<-10,-6.90>, <-10,-.10>, <-14,-.10>, <-16,-2>,
<-16,-5>, <-15,-6.90>, <-10,-6.90>
<-10,.10>, <-10,6.90>, <-15,6.90>, <-16,5>,
<-16,3>, <-15,1>, <-14,.10>, <-10,.10>
<-10,7.10>, <-10,12.90>, <-15,13.50>, <-16,11>,
<-16,9>, <-15,7.10>, <-10,7.10>
<-10,13.10>, <-9,15.90>, <-8,17.90>, <-12,19.90>,
<-15,17.90>, <-16,14>, <-15,13.10>, <-10,13.10>
<-7.90,18.10>, <-7,19>, <-6,19.40>, <-4.10,20>,
<-7,25>, <-11,24>, <-12,22>, <-12.20, 20.10>, <-7.90,18.10>
<-3.90,20>, <-.10,20>, <-.10,27>, <-7,26>, <-3.90,20>
// la siguiente ristra de transformaciones deja el marco sobre el suelo
translate<0,-5,-3> rotate x*-90 scale<.5,.5,1> translate<0,11.50,0>
}
#declare marcopd=object {marcopi rotate y*180}
#declare fbpuer1=union{
intersection{
cylinder{<0,-1,0>,<0,1,0>,5 rotate x*90 translate<0,15.5,0>}
plane{x,15.5}
}
box{<-5,0,-1>,<5,15.5,1>}
texture{textmur1 rotate y*45 rotate x*45}
}
#declare marcopu=difference{
union{
object {marcopi}
object {marcopd}
}
object{fbpuer1 scale<1.1,1,6>}
texture{textmur1 rotate y*45 rotate x*45}
}
// recorte de esta puerta para muros o torres
#declare recpuer1=object{fbpuer1 scale<1.1,1,15>
texture{textmur1 rotate y*45 rotate x*45}
}
#declare hierrop=union{
difference{
object{fbpuer1 translate<0,-10.25,0> scale<1,1,1.33> texture{T_Copper_1A}}
object{fbpuer1 translate<0,-10.25,0> scale<.85,.90,2> texture{T_Copper_1A}}
translate<0,10.25,0>
}
intersection{
object{fbpuer1 translate<0,-10.25,0> scale<1,1,1.33>
translate<0,10.25,0> texture{T_Copper_1A}}
union{
box{<-20,5,-4>,<20,6,4>} //hierros horizontales de puerta
box{<-20,10,-4>,<20,11,4>}
box{<-20,15,-4>,<20,16,4>}
texture{T_Copper_1A}}
}
// texture{T_Copper_1A}
}
#declare puerta=union{
object{marcopu}
object{fbpuer1 texture{T17 scale<10,10,10> rotate x*90}}
object{hierrop scale<1.05,1,1.05>}
// pomo de la puerta
union{
sphere {<3.25,10.40,-2>,.50}
torus {.90,.15 rotate x*90 translate <3.25,9.75,-2>}
texture{T_Copper_5A}
}
// la puerta tiene 2.3 *1.80 metros de altura (incluyendo las piedras) el
// ancho es de un metro
// bounded_by{box{<-9,0,-5>,<9,23,5>}}
}
#declare marcove1=union{
difference{
object{marcopu translate<0,-3,0>}
plane{y,0}
translate<0,-10,0> scale<.60,.80,1> translate<0,8,0>
}
// piedra de la base de la ventana
superellipsoid { <0.35, 0.35> scale <4.5,1.6,4> translate<0,-.8,-3>}
// barrotes
union{
cylinder{<-1.25,0,-2.5>,<-1.25,15,-2.5>,.4}
cylinder{<1.25,0,-2.5>,<1.25,15,-2.5>,.4}
cylinder{<-1.25,-4,-2.5>,<-1.25,4,-2.5>,.4 rotate z*90 translate<0,10,0>}
cylinder{<1.25,-4,-2.5>,<1.25,4,-2.5>,.4 rotate z*90 translate<0,3,0>}
texture{T_Copper_1A}
}
translate<0,1.6,0>
pigment{Orange}
// pigment{image_map{tga "piedra3.tga"} rotate x*45 rotate y*45}
}
#declare recven1=object{fbpuer1 translate<0,-8.25,0>
scale<.60,.80,1> scale<1.1,1,8> translate<0,8,0>
texture{textmur1 rotate y*45 rotate x*45}
}
// la portilla que va en la cima de las torres
#declare portilla=union{
difference{
cylinder{<0,-3,0>, <0,3,0>,5.45}
cylinder{<0,-4,0>, <0,4,0>,4}
texture{T_Copper_1A}
}
union{
box{<-5,-3,-.75>,<5,3,.75>}
box{<-5,-3,-.75>,<5,3,.75> rotate y*90}
texture{T_Copper_1A}
}
// pomo de la puerta
union{
sphere {<0,3.50,0>,.75 translate <3,0,0>}
torus {.90,.15 translate <2,3.25,0>}
texture{T_Copper_5A}
}
cylinder{<0,-2.50,0>, <0,2.50,0>,5.45 texture{T17 scale<10,10,10>} }
translate <0,3.50,0>
scale<1.50,1,1.50>
}
//170 alto (Y), 140 ancho (X) y 1 de grosor. En las coords. dadas, los val.
//de X corresponden pero los de Y corresp. a Z (del plano de dibujo al plano
//3d) (La aspillera queda mirando de frente, centrada en x=0, con suelo y=0)
#declare macroas=union{
difference {
prism{ linear_sweep
linear_spline
0,14
7,
<0,0>, <2.5,11>, <5,17>, <7.5,17>,
<10,11>, <10,0>, <0,0>
}
prism{ linear_sweep
linear_spline
2,12
5,
<0,0>, <0,11>, <12,6.5>, <12, 4.5>, <0,0>
translate<0,-5.5,-6>
rotate x*90
translate<0,6,5.5>
translate<0,.5,0>
}
translate <-5,-7,-8.5> // centrado de la forma
rotate x*-90
rotate y*-270
translate <0,7,0>
}
}
#declare lateralas=difference{
object{macroas}
box{<-6.9,-10,-20>,<6.9,20,20> }
scale <1.02,1,1>
texture{texcastle rotate y*90}
}
#declare aspilleraGt= union{
object {macroas}
object {lateralas}
difference {
box{<-3.5,-10,-5>,<3.5,0,0>}
plane{ <0,10,0>,0 rotate x*52 translate <0,-10,0>}
}
texture{texcastle}
// pigment{Orange}
}
// aspilleraG es usada para las torres
#declare aspilleraG= union{
object{aspilleraGt}
box{<-14.75,0,-3.5>,<-7,7.5,0>}
box{<7,0,-3.5>,<14.75,7.5,0>}
texture{texcastle}
}
// esta declaración es empleada en los muros y en algunas torres cuadradas
#declare ristra10=union{
#declare cal=0
// el valor inicial de xa se debe a que la aspillera esta centrada en 0 y va
// de -12.50 a 12.50. 50-12.50=37.50 (realmente va de 15 a 15 pero este
// espacio extra se destina a que encajen los bloques en las torres
// cuadradas. Asi, si deseamos crear una ristra desde -250 a 250 xa
// comenzara a 250-12.50=237.50.
#declare xa=-37.5
#while(cal!=4)
object{ aspilleraG translate<xa,0,0>}
#declare cal=cal+1
#declare xa=xa+25
#end
}
// EJEMPLOS DE MUROS
// Este muro tiene 10 metros de alto * 10 de largo y 1.6 de ancho. Esta
// centrado en z=0 y va desde 0 a 100X, de frente al espec.
#declare muro10_10= union{
box{<0,0,-8>,<100,100,8>}
object{ristra10 translate<50,100,-8>}
texture{texcastle}
}
// sigue el mismo muro con doble longitud
#declare muro10_20= union{
box{<0,0,-8>,<200,100,8>}
object{ristra10 translate<50,100,-8>}
object{ristra10 translate<150,100,-8>}
texture{texcastle}
}
// Puerta Grande. usada para entradas a zonas internas o torres grandes del
// castillo. Tiene 7 metros y medio de altura* 5 de ancho.
// en primer lugar, definimos la forma basica
#declare fbport1=union{
intersection{
cylinder{<0,-3,0>,<0,3,0>,25 rotate x*90 translate<0,50,0>}
plane{x,50}
}
box{<-25,0,-3>,<25,50,3>}
// pigment{Brown}
}
// recorte para el muro
#declare recport1=object{fbport1 translate<0,-37.5,0>
scale<1.02,1.067,4>
translate<0,37.5,0>
translate<0,-2,0>}
#declare hierropG=union{
difference{
object{fbport1 translate<0,-37.5,0> scale<1,1,1.33>}
object{fbport1 translate<0,-37.5,0> scale<.90,.90,2>}
translate<0,37.5,0>
}
intersection{
object{fbport1 translate<0,-37.5,0> scale<1,1,1.33> translate<0,37.5,0>}
union{
box{<-40,16,-4>,<40,20,4>} //hierros horizontales de puerta
box{<-40,32,-4>,<40,36,4>}
box{<-40,48,-4>,<40,52,4>}
box{<-4,0,-4>,<4,100,4>} //hierro vertical de puerta
}
}
texture{T_Brass_1A}
}
//batiente izquierda de puerta grande
#declare batizqpG=difference{
union{
object{fbport1 texture{T17 scale<10,10,10> rotate x*90}}
object{hierropG}
}
plane{-x,.15}
}
#declare batidepG=object{batizqpG rotate y*180}
#declare puertaG=union{
object{batizqpG}
object{batidepG}
}
// mas EJEMPLOS DE MUROS, ESTA vez con puertas
//otra vez el muro de 10*10, pero ahora con porton de entrada cerrado
#declare muro10_10pc=union{
difference{
object{muro10_10}
object{recport1}
texture{textmur1}
}
object{puertaG}
}
//otra vez el muro de 10*20, pero ahora con porton de entrada cerrado
#declare muro10_20pc=union{
difference{
object{muro10_20}
object{recport1}
texture{textmur1}
}
object{puertaG}
}
// ESCALERAS
// tramo de escaleras para alcanzar 10 metros de altura. Sube de izq. a
// der., mostrando el lado horizontal al espectador. Tiene 1.8 metros de
// ancho y 9.5 metros de largo. Consta de 50 peldaños
#declare escal10= union{
#declare pel=0
#declare alt=4
#declare xpel=-45
#while (pel!=50)
box{<xpel,alt-4,-5>,<45,alt,5>}
#declare alt=alt+2
#declare pel=pel+1
#declare xpel=xpel+1.9
#end
texture{textmur1}
}
// Torres colgantes. Estas estructuras son colocadas en las secciones de
// las torres de tierra. Cada una es una unidad completa
// pieza usada para crear el "cilindro" de la torre
#declare piezacil60=difference{
cylinder{<0,60,0>,<0,100,0>,30 }
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
cylinder{<0,65,0>,<0,120,0>,25}
texture{texcastle}
}
//"piezahue" es usada para los huecos entre las aspilleras
#declare pieza1=difference{
cylinder{<0,100,0>,<0,108,0>,34.5 }
cylinder{<0,90,0>,<0,120,0>,30}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle}
}
#declare pieza2=difference{
cylinder{<0,108,0>,<0,108.1,0>,34.5 }
cylinder{<0,90,0>,<0,120,0>,30}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle rotate x*90}
}
#declare piezahue=union{
object{pieza1 }
object{pieza2 }
}
//pieza usada para crear la base redonda de la torre
#declare piezacir60=difference{
sphere{<0,0,0>,30}
plane {-y,0}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle}
}
#declare torcol1=union{ // torre colgante redondeada
union{
#declare ngra=0
#while (ngra<331)
object{piezacir60 rotate y*ngra }
#declare ngra=ngra+30
#end
translate <0,60,0>
}
difference{
union{
#declare ngra=0
#while (ngra<331)
object{piezacil60 rotate y*ngra }
#declare ngra=ngra+30
#end
}
object{recven1 translate <0,70,-31>}
object{recven1 translate <0,70,-31> rotate y*55}
object{recven1 translate <0,70,-31> rotate y*-55}
}
cylinder{<0,90,0>,<0,100,0>,30
texture{texcastle1 rotate x*90}
}
// ventanas
object{marcove1 translate <0,70,-28> texture{textmur1}}
object{marcove1 translate <0,70,-28> texture{textmur1} rotate y*55}
object{marcove1 translate <0,70,-28> texture{textmur1} rotate y*-55}
// aqui va la banda lateral donde iran las aspilleras
difference{
union{
#declare ngra=0
#while (ngra<331)
object{piezahue rotate y*ngra }
#declare ngra=ngra+30
#end
}
union{
#declare nalm=0
#while (nalm!=6)
box{<-7,90,-40>,<7,110,22> rotate y*(nalm*60)}
#declare nalm=nalm+1
#end
rotate y*30
}
}
// siguen las aspilleras propiamente dichas
union{
#declare nalm=0
#while (nalm!=6)
object{ aspilleraGt translate<0,100,-31> rotate y*(nalm*60)}
#declare nalm=nalm+1
#end
rotate y*30
}
}
#declare ristra5=union{
object{ aspilleraG translate<-12.5,0,0>}
object{ aspilleraG translate<12.5,0,0>}
}
#declare soporte0=intersection{
difference{
box{<-4,30,-27>,<4,60,40>}
sphere{<0,25,-30>,30}
}
sphere{<0,25,-30>,35}
texture{T17 scale<10,10,10>}
}
#declare soporte1=union{
box{<-28,55,-28>,<28,60,-24>} // viga-soporte
box{<-28,55,-14>,<28,60,-10>} // viga-soporte
object{soporte0}
object{soporte0 translate <-20,0,0>}
object{soporte0 translate <20,0,0>}
texture{T17 scale<10,10,10>}
}
#declare torcol2=union{ // torre colgante de base rectangular
object{soporte1} //base
box{<-24.8,95,-24.8>,<24.8,101,24.8> texture{texcastle1 rotate x*90}}
difference{
box{<-24.8,60,-25>,<24.8,100,-20> texture{texcastle}}
object{recven1 translate <0,70,-25>}
}
difference{
box{<-24.8,60,-25>,<24.8,100,-20> texture{texcastle}}
object{recven1 translate <0,70,-25>}
rotate y*90
}
difference{
box{<-24.8,60,-25>,<24.8,100,-20> texture{texcastle}}
object{recven1 translate <0,70,-25>}
rotate y*-90
}
// ventana
object{marcove1 translate <0,70,-24> texture{textmur1}}
object{marcove1 translate <0,70,-24> texture{textmur1} rotate y*90}
object{marcove1 translate <0,70,-24> texture{textmur1} rotate y*-90}
// siguen las aspilleras propiamente dichas
union{
object {ristra5 translate <0,100,-25>}
object {ristra5 translate <0,100,-25> rotate y*90}
object {ristra5 translate <0,100,-25> rotate y*-90}
texture{textmur1}
}
}
//#include "town.inc"
#include "lateral.inc" //versión recortada de town.inc
/* Debido a cuestiones de velocidad, las torres de tierra estan compuestas
por dos o mas secciones. La altura de estas secciones sera siempre de 5
o 10 metros por lo que la altura total de una torre sera, al menos, de 15
mts. Como las secciones (dentro del mismo ancho) son intercambiables,
obtendremos bastante variedad para las torres a construir y podremos
añadir definiciones para secciones y torres nuevas con toda facilidad.
Ademas, al ser siempre la altura multiplo de 5, podremos conectar las
torres con puentes y otras estructuras.
Las secciones pueden ser redondeadas o cuadradas y su anchura sera como
minimo de de 10. Aparte de esto cada sección debe ser de uno de estos
tipos: base (b), media (m) o final (f). El ancho de las torres sera
siempre multiplo de 5 (para poder conectarlas mas facilmente con
murallas, puentes, etc).
Los nombres de secciones son autoexplicativos: secb10_5r significa
sección base redondeada de 10 metros de anchura * 5 de ancho. Las
secciones estan huecas y tienen techo pero no suelo (se apilan unas
encima de otras).
Para cada tipo de torre comenzamos con las declaraciones de recortes y
piezas. Sigue la lista de secciones y, por ultimo, las declaraciones de
torres construidas con las secciones definidas */
// declaraciones para PIEZAS DE SECCIONES CIRCULARES DE 10 METROS DE ANCHO
//recortes de ventana de 10 de ancho
#declare base=45 // angulo donde se pondra la primera ventana
#declare pZ=-51 // pos. Z donde iran las ventanas (radio de torre)
#declare angsum=90 // angulo de separacion entre cada ventana
#declare clipw10r=union{
#while(base<360)
object{recven1 translate <0,0,pZ> rotate y*(base+angsum)}
#declare base=base+angsum
#end
texture{textmur1}
}
//ventanas de la torre
#declare base=45
#declare makew10r=union{
#while(base<360)
object{marcove1 translate <0,0,pZ+3> rotate y*(base+angsum)}
#declare base=base+angsum
#end
texture{textmur1}
}
#declare piezacil10=difference{
cylinder{<0,0,0>,<0,100,0>,51 }
plane{-z,0 rotate y*(22.5-90)}
plane{-z,0 rotate -y*(22.5-90)}
cylinder{<0,-5,0>,<0,120,0>,42 } //ancho del muro: 1 metro aprox.
texture{texcastle}
}
#declare cilindro10=union{
#declare ngra=0
#while (ngra<331)
object{piezacil10 rotate y*ngra }
#declare ngra=ngra+30
#end
}
// Sigue la LISTA DE SECCIONES para TORRES REDONDAS DE 10 metros de ancho
// La base con una puerta en -Z
#declare secb10_10r=union{
difference {
object{cilindro10}
// el recorte para la puerta del lado Z-
object{recpuer1 translate<0,0,-51>}
// siguen los recortes para las ventanas de esta torre
object{clipw10r translate <0,80,0>}
}
// colocar la puerta de la base
object{puerta translate<0,0,-50>}
// siguen los 4 marcos de los respiraderos
object{makew10r translate <0,80,0>}
}
//la sección media siguiente se usa para obtener mas desigualdades de altura
#declare secm10_5r=difference{
object{cilindro10}
box{<-60,50,-60>,<60,110,60>}
}
// una sección media con ventanas
#declare secm10_10r=union{
difference {
object{cilindro10}
// siguen los recortes para las ventanas de esta torre
object{clipw10r translate <0,80,0>}
}
// siguen los 4 marcos de los respiraderos
object{makew10r translate <0,80,0>}
}
// una sección media con 4 torres colgantes torcol1
#declare secm10_10r01=union{
object{cilindro10}
object{torcol1 translate<0,0,-50> }
object{torcol1 translate<0,0,-50> rotate y*90}
object{torcol1 translate<0,0,-50> rotate y*-90}
object{torcol1 translate<0,0,-50> rotate y*180}
}
// una sección media con 4 torres colgantes torcol2
#declare secm10_10r02=union{
object{cilindro10}
object{torcol2 translate<0,0,-56> }
object{torcol2 translate<0,0,-56> rotate y*90}
object{torcol2 translate<0,0,-56> rotate y*-90}
object{torcol2 translate<0,0,-56> rotate y*180}
}
// una sección media con 4 puertas
#declare secm10_10r03=union{
difference {
object{cilindro10}
object{recpuer1 translate<0,0,-51> }
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
object{recpuer1 translate<0,0,-51> rotate y*180}
}
object{puerta translate<0,0,-50> }
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
object{puerta translate<0,0,-50> rotate y*180}
}
// sección media con 4 colgantes de tipo 1 y 2
#declare secm10_10r04=union{
object{cilindro10}
object{colgante1 translate<0,0,-56> }
object{colgante2 translate<0,0,-56> rotate y*90}
object{colgante1 translate<0,0,-56> rotate y*-90}
object{colgante2 translate<0,0,-56> rotate y*180}
}
// sigue declar. de SECCION CIMA BASICA de 5 de alto
#declare piezat1=difference{
cylinder{<0,50,0>,<0,58,0>,54.5 }
cylinder{<0,45,0>,<0,60,0>,50}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle}
}
#declare piezat2=difference{
cylinder{<0,58,0>,<0,58.1,0>,54.5 }
cylinder{<0,45,0>,<0,60,0>,50}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle rotate x*90}
}
#declare piezahue1=union{
object{piezat1 }
object{piezat2 }
}
#declare secf10_5r=union{
difference { // cuerpo central
object{cilindro10}
box{<-60,45,-60>,<60,110,60>}
}
// el techo de la torre
cylinder{<0,45,0>,<0,50,0>,51 texture{texcastle2 rotate x*90}}
// la portilla superior
object{portilla translate <0,45,0>}
// aqui va la banda lateral donde iran las aspilleras
difference{
union{
#declare ngra=0
#while (ngra<331)
object{piezahue1 rotate y*ngra }
#declare ngra=ngra+30
#end
}
union{
#declare nalm=0
#while (nalm!=10)
box{<-7,50,-60>,<7,60,32> rotate y*(nalm*36)}
#declare nalm=nalm+1
#end
rotate y*30
}
}
// siguen las aspilleras propiamente dichas
union{
#declare nalm=0
#while (nalm!=10)
object{ aspilleraGt translate<0,50,-51> rotate y*(nalm*36)}
#declare nalm=nalm+1
#end
rotate y*30
}
}
// Casos mas frecuentes para la cima anterior
// esta torre tiene 2 puertas, en los lados X+ y X-, porque tiene muro a
// ambos lados.
#declare secf10_5r01=union{
difference{
object{secf10_5r}
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
}
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
}
// puerta en X+ y en Z-
#declare secf10_5r02=union{
difference{
object{secf10_5r}
object{recpuer1 translate<0,0,-51> rotate y*180}
object{recpuer1 translate<0,0,-51> rotate y*90}
}
object{puerta translate<0,0,-50> rotate y*180}
object{puerta translate<0,0,-50> rotate y*90}
}
// puerta en X- y en Z-
#declare secf10_5r03=union{
difference{
object{secf10_5r}
object{recpuer1 translate<0,0,-51> rotate y*180}
object{recpuer1 translate<0,0,-51> rotate y*-90}
}
object{puerta translate<0,0,-50> rotate y*180}
object{puerta translate<0,0,-50> rotate y*-90}
}
// en esta sección hay tres puertas (en la de Z habra una escal. u otro
// muro
#declare secf10_5r04=union{
difference{
object{secf10_5r}
object{recpuer1 translate<0,0,-51> }
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
}
object{puerta translate<0,0,-50> }
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
}
//4 puertas (por torres colgantes en la sección inferior)
#declare secf10_5r05=union{
difference{
object{secf10_5r}
object{recpuer1 translate<0,0,-51> }
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
object{recpuer1 translate<0,0,-51> rotate y*180}
}
object{puerta translate<0,0,-50> }
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
object{puerta translate<0,0,-50> rotate y*180}
}
/* EJEMPLOS DE TORRES CIRCULARES DE 10 METROS DE ANCHO
//Torre de "muralla de 10 de alto" con dos puertas en X+ y X-, sobre esta
#declare TORRE15_10r1=union{
object{secb10_10r}
object{secf10_5r01 translate<0,100,0>}
}
//idem. con puertas en X+ y Z- (en una esquina, sobre la muralla)
#declare TORRE15_10r2=union{
object{secb10_10r}
object{secf10_5r02 translate<0,110,0>}
}
//idem. con puertas en X- y Z- (la esquina opuesta de la muralla)
#declare TORRE15_10r3=union{
object{secb10_10r}
object{secf10_5r03 translate<0,100,0>}
}
// idem. con 3 puertas sobre la muralla (X-, X+ y Z-, donde habra una escal.
// u otro muro
#declare TORRE15_10r4=union{
object{secb10_10r}
object{secf10_5r04 translate<0,100,0>}
}
// Torre utilizada como puesto de vigia (suele ir encima de otras)
#declare TORRE25_10v=union{
object{secb10_10r}
object{secm10_10r translate<0,100,0>}
object{secf10_5r translate<0,200,0>}
}
// Torre vigia con tres torres colgantes torcol1 (suele ir pegada a otras)
#declare TORRE25_10v1=union{
object{secb10_10r}
object{secm10_10r01 translate<0,100,0>}
object{secf10_5r04 translate<0,200,0>}
}
// Torre vigia con tres torres colgantes torcol2
#declare TORRE25_10v2=union{
object{secb10_10r}
object{secm10_10r02 translate<0,100,0>}
object{secf10_5r04 translate<0,200,0>}
}
*/
// ======================================================================
// declaraciones para PIEZAS DE SECCIONES CIRCULARES DE 20 METROS DE ANCHO
//recortes de ventana de 10 de ancho
#declare base=22.5 // angulo donde se pondra la primera ventana
#declare pZ=-51 // pos. Z donde iran las ventanas (radio de torre)
#declare angsum=45 // angulo de separacion entre cada ventana
#declare clipw20r=union{
#while(base<360)
object{recven1 translate <0,0,pZ> rotate y*(base+angsum)}
#declare base=base+angsum
#end
texture{textmur1}
}
//ventanas de la torre
#declare base=22.5
#declare makew20r=union{
#while(base<360)
object{marcove1 translate <0,0,pZ+3> rotate y*(base+angsum)}
#declare base=base+angsum
#end
texture{textmur1}
}
#declare piezacil20=difference{
cylinder{<0,0,0>,<0,100,0>,101 }
plane{-z,0 rotate y*(22.5-90)}
plane{-z,0 rotate -y*(22.5-90)}
cylinder{<0,5,0>,<0,120,0>,92 }
texture{texcastle}
}
#declare cilindro20=union{
#declare ngra=0
#while (ngra<331)
object{piezacil20 rotate y*ngra }
#declare ngra=ngra+30
#end
}
// Sigue la LISTA DE SECCIONES para TORRES REDONDAS DE 20 metros de ancho
// La base con una puerta en -Z
#declare secb20_10r=union{
difference {
object{cilindro20}
// el recorte para la puerta del lado Z-
object{recpuer1 translate<0,0,-101>}
// siguen los recortes para las ventanas de esta torre
object{clipw20r translate <0,80,0>}
}
// colocar la puerta de la base
object{puerta translate<0,0,-100>}
// siguen los 4 marcos de los respiraderos
object{makew20r translate <0,80,0>}
}
// una sección media con ventanas
#declare secm20_10r=union{
difference {
object{cilindro20}
// siguen los recortes para las ventanas de esta torre
object{clipw20r translate <0,80,0>}
}
// siguen los 4 marcos de los respiraderos
object{makew20r translate <0,80,0>}
}
// una sección media con 4 torres colgantes torcol1
#declare secm20_10r01=union{
object{cilindro20}
object{torcol1 translate<0,0,-100> }
object{torcol1 translate<0,0,-100> rotate y*90}
object{torcol1 translate<0,0,-100> rotate y*-90}
object{torcol1 translate<0,0,-100> rotate y*180}
}
// una sección media con 4 torres colgantes torcol2
#declare secm20_10r02=union{
object{cilindro20}
object{torcol2 translate<0,0,-106> }
object{torcol2 translate<0,0,-106> rotate y*90}
object{torcol2 translate<0,0,-106> rotate y*-90}
object{torcol2 translate<0,0,-106> rotate y*180}
}
// una sección media con 4 puertas
#declare secm20_10r03=union{
difference {
object{cilindro20}
object{recpuer1 translate<0,0,-101> }
object{recpuer1 translate<0,0,-101> rotate y*90}
object{recpuer1 translate<0,0,-101> rotate y*-90}
object{recpuer1 translate<0,0,-101> rotate y*180}
}
object{puerta translate<0,0,-100> }
object{puerta translate<0,0,-100> rotate y*90}
object{puerta translate<0,0,-100> rotate y*-90}
object{puerta translate<0,0,-100> rotate y*180}
}
// sigue declar. basica de sección cima de 5 de alto
#declare piezato1=difference{
cylinder{<0,50,0>,<0,58,0>,104.5 }
cylinder{<0,45,0>,<0,60,0>,100}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle}
}
#declare piezato2=difference{
cylinder{<0,58,0>,<0,58.1,0>,104.5 }
cylinder{<0,45,0>,<0,60,0>,100}
plane{-z,0 rotate y*(30-90)}
plane{-z,0 rotate -y*(30-90)}
texture{texcastle rotate x*90}
}
#declare piezahuec1=union{
object{piezato1 }
object{piezato2 }
}
#declare secf20_5r=union{
difference { // cuerpo central
object{cilindro20}
box{<-110,45,-110>,<110,110,110>}
}
// el techo de la torre
cylinder{<0,45,0>,<0,50,0>,101 texture{texcastle2 rotate x*90}}
// la portilla superior
object{portilla translate <0,45,0>}
// aqui va la banda lateral donde iran las aspilleras
difference{
union{
#declare ngra=0
#while (ngra<331)
object{piezahuec1 rotate y*ngra }
#declare ngra=ngra+30
#end
}
union{
#declare nalm=0
#while (nalm!=20)
box{<-7,50,-110>,<7,60,90> rotate y*(nalm*18)}
#declare nalm=nalm+1
#end
rotate y*30
}
}
// siguen las aspilleras propiamente dichas
union{
#declare nalm=0
#while (nalm!=20)
object{ aspilleraGt translate<0,50,-101> rotate y*(nalm*18)}
#declare nalm=nalm+1
#end
rotate y*30
}
}
// Casos mas frecuentes para la cima anterior
// esta torre tiene 2 puertas, en los lados X+ y X-, porque tiene muro a
// ambos lados.
#declare secf20_5r01=union{
difference{
object{secf20_5r}
object{recpuer1 translate<0,0,-101> rotate y*90}
object{recpuer1 translate<0,0,-101> rotate y*-90}
}
object{puerta translate<0,0,-100> rotate y*90}
object{puerta translate<0,0,-100> rotate y*-90}
}
// puerta en X+ y en Z-
#declare secf20_5r02=union{
difference{
object{secf20_5r}
object{recpuer1 translate<0,0,-101> rotate y*180}
object{recpuer1 translate<0,0,-101> rotate y*90}
}
object{puerta translate<0,0,-100> rotate y*180}
object{puerta translate<0,0,-100> rotate y*90}
}
// puerta en X- y en Z-
#declare secf20_5r03=union{
difference{
object{secf20_5r}
object{recpuer1 translate<0,0,-101> rotate y*180}
object{recpuer1 translate<0,0,-101> rotate y*-90}
}
object{puerta translate<0,0,-100> rotate y*180}
object{puerta translate<0,0,-100> rotate y*-90}
}
// en esta sección hay tres puertas (en la de Z habra una escal. u otro
// muro
#declare secf20_5r04=union{
difference{
object{secf20_5r}
object{recpuer1 translate<0,0,-101> }
object{recpuer1 translate<0,0,-101> rotate y*90}
object{recpuer1 translate<0,0,-101> rotate y*-90}
}
object{puerta translate<0,0,-100> }
object{puerta translate<0,0,-100> rotate y*90}
object{puerta translate<0,0,-100> rotate y*-90}
}
#declare secf20_5r05=union{
difference{
object{secf20_5r}
object{recpuer1 translate<0,0,-101> }
object{recpuer1 translate<0,0,-101> rotate y*90}
object{recpuer1 translate<0,0,-101> rotate y*-90}
object{recpuer1 translate<0,0,-101> rotate y*180}
}
object{puerta translate<0,0,-100> }
object{puerta translate<0,0,-100> rotate y*90}
object{puerta translate<0,0,-100> rotate y*-90}
object{puerta translate<0,0,-100> rotate y*180}
}
// TORRES CIRCULARES DE 20 METROS DE ANCHO
#declare TORRE25_20r1=union{
object{secb20_10r}
object{secm20_10r02 translate<0,100,0>}
object{secf20_5r01 translate<0,200,0>}
}
// TORRES CUADRADAS DE 10 METROS DE DIAMETRO
// recorte y pegado de ventanas para torre cuadrada de 10 metros de ancho
#declare pZ=-50
#declare nv=0 // contador de ventanas
#declare numv=2 // num. de ventanas a poner
#declare separ=60 // separación entre ventanas
#declare baseX=-30 // pos. X de primera ventana
#declare clipw10c=union{
#while(nv<numv)
object{recven1 translate <baseX+(nv*separ),0,pZ>}
object{recven1 translate <baseX+(nv*separ),0,pZ> rotate y*90}
object{recven1 translate <baseX+(nv*separ),0,pZ> rotate y*180}
object{recven1 translate <baseX+(nv*separ),0,pZ> rotate y*270}
#declare nv=nv+1
#end
}
#declare nv=0
#declare numv=2
#declare separ=60
#declare baseX=-30
#declare makew10c=union{
#while(nv<numv)
object{marcove1 translate <baseX+(nv*separ),0,pZ+3>}
object{marcove1 translate <baseX+(nv*separ),0,pZ+3> rotate y*90}
object{marcove1 translate <baseX+(nv*separ),0,pZ+3> rotate y*180}
object{marcove1 translate <baseX+(nv*separ),0,pZ+3> rotate y*270}
#declare nv=nv+1
#end
}
// Sigue la LISTA DE SECCIONES para TORRES CUADRADAS DE 10 metros de ancho
#declare secbacu10=union{ //seccion basica de 10*10 metros
box{<-49.8,0,-50>,<49.8,100,-49> texture{texcastle}}
box{<-49.8,0,-50>,<49.8,100,-49> texture{texcastle} rotate y*90}
box{<-49.8,0,-50>,<49.8,100,-49> texture{texcastle} rotate y*-90}
box{<-49.8,0,-50>,<49.8,100,-49> texture{texcastle} rotate y*180}
}
//sigue una sección basica usada para conseguir mas desigualdades de alturas
#declare secbacu10_5=union{
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle}}
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle} rotate y*90}
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle} rotate y*-90}
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle} rotate y*180}
}
// La base con una puerta en -Z
#declare secb10_10c=union{
difference {
object{secbacu10}
// el recorte para la puerta del lado Z-
object{recpuer1 translate<0,0,-51>}
// siguen los recortes para las ventanas de esta torre
object{clipw10c translate <0,80,0>}
}
// colocar la puerta de la base
object{puerta translate<0,0,-50>}
// siguen los 4 marcos de los respiraderos
object{makew10c translate <0,80,0>}
}
// una sección media con ventanas
#declare secm10_10c=union{
difference {
object{secbacu10}
// siguen los recortes para las ventanas de esta torre
object{clipw10c translate <0,80,0>}
}
// siguen los 4 marcos de los respiraderos
object{makew10c translate <0,80,0>}
}
// una sección media con 4 torres colgantes torcol1
#declare secm10_10c01=union{
object{secbacu10}
object{torcol1 translate<0,0,-50> }
object{torcol1 translate<0,0,-50> rotate y*90}
object{torcol1 translate<0,0,-50> rotate y*-90}
object{torcol1 translate<0,0,-50> rotate y*180}
}
// una sección media con 4 torres colgantes torcol2
#declare secm10_10c02=union{
object{secbacu10}
object{torcol2 translate<0,0,-56> }
object{torcol2 translate<0,0,-56> rotate y*90}
object{torcol2 translate<0,0,-56> rotate y*-90}
object{torcol2 translate<0,0,-56> rotate y*180}
}
// una sección media con 4 puertas
#declare secm10_10c03=union{
difference {
object{secbacu10}
object{recpuer1 translate<0,0,-51> }
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*180}
object{recpuer1 translate<0,0,-51> rotate y*270}
}
object{puerta translate<0,0,-50> }
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*180}
object{puerta translate<0,0,-50> rotate y*270}
}
// sección media con 4 colgantes del tipo 1 y 2
#declare secm10_10c04=union{
object{secbacu10}
object{colgante1 translate<0,0,-56> }
object{colgante2 translate<0,0,-56> rotate y*90}
object{colgante1 translate<0,0,-56> rotate y*-90}
object{colgante2 translate<0,0,-56> rotate y*180}
}
// sigue declar. de SECCION CIMA BASICA de 5 de alto
#declare secf10_5c=union{
//paredes
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle}}
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle} rotate y*90}
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle} rotate y*-90}
box{<-49.8,0,-50>,<49.8,50,-49> texture{texcastle} rotate y*180}
//techo
box{<-49.8,45,-49.8>,<49.8,50,49.8> texture{texcastle2 rotate x*90}}
// la portilla superior
object{portilla translate <0,45,0>}
// siguen las aspilleras
union{
object {ristra10 translate <0,50,-50>}
object {ristra10 translate <0,50,-50> rotate y*90}
object {ristra10 translate <0,50,-50> rotate y*-90}
object {ristra10 translate <0,50,-50> rotate y*180}
}
}
// Casos mas frecuentes para la cima anterior
// esta torre tiene 2 puertas, en los lados X+ y X-, porque tiene muro a
// ambos lados.
#declare secf10_5c01=union{
difference{
object{secf10_5c}
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
}
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
}
// puerta en X+ y en Z-
#declare secf10_5c02=union{
difference{
object{secf10_5c}
object{recpuer1 translate<0,0,-51> rotate y*180}
object{recpuer1 translate<0,0,-51> rotate y*90}
}
object{puerta translate<0,0,-50> rotate y*180}
object{puerta translate<0,0,-50> rotate y*90}
}
// puerta en X- y en Z-
#declare secf10_5c03=union{
difference{
object{secf10_5c}
object{recpuer1 translate<0,0,-51> rotate y*180}
object{recpuer1 translate<0,0,-51> rotate y*-90}
}
object{puerta translate<0,0,-50> rotate y*180}
object{puerta translate<0,0,-50> rotate y*-90}
}
// en esta sección hay tres puertas (en la de Z habra una escal. u otro
// muro
#declare secf10_5c04=union{
difference{
object{secf10_5c}
object{recpuer1 translate<0,0,-51> }
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
}
object{puerta translate<0,0,-50> }
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
}
// en esta sección hay 4 puertas (hay torres colgantes)
#declare secf10_5c05=union{
difference{
object{secf10_5c}
object{recpuer1 translate<0,0,-51> }
object{recpuer1 translate<0,0,-51> rotate y*90}
object{recpuer1 translate<0,0,-51> rotate y*-90}
object{recpuer1 translate<0,0,-51> rotate y*180}
}
object{puerta translate<0,0,-50> }
object{puerta translate<0,0,-50> rotate y*90}
object{puerta translate<0,0,-50> rotate y*-90}
object{puerta translate<0,0,-50> rotate y*180}
}
// SECCIONES PARA TORRES CUADRADAS DE 20 METROS DE ANCHO
// (estas torres no tienen ventanas porque siempre estan rodeadas de
// otras torres mas pequeñas).
#declare secbacu20=union{ //seccion basica de 10*10 metros
box{<-99.8,0,-50>,<99.8,100,-99> texture{texcastle}}
box{<-99.8,0,-50>,<99.8,100,-99> texture{texcastle} rotate y*90}
box{<-99.8,0,-50>,<99.8,100,-99> texture{texcastle} rotate y*-90}
box{<-99.8,0,-50>,<99.8,100,-99> texture{texcastle} rotate y*180}
}
// La base con una puerta en -Z
#declare secb20_10c=union{
difference {
object{secbacu20}
// el recorte para la puerta del lado Z-
object{recpuer1 translate<0,0,-101>}
}
// colocar la puerta de la base
object{puerta translate<0,0,-50>}
}
// una sección media con 4 torres colgantes torcol1
#declare secm20_10c01=union{
object{secbacu20}
object{torcol1 translate<0,0,-100> }
object{torcol1 translate<0,0,-100> rotate y*90}
object{torcol1 translate<0,0,-100> rotate y*-90}
object{torcol1 translate<0,0,-100> rotate y*180}
}
// una sección media con 4 torres colgantes torcol2
#declare secm20_10c02=union{
object{secbacu20}
object{torcol2 translate<0,0,-106> }
object{torcol2 translate<0,0,-106> rotate y*90}
object{torcol2 translate<0,0,-106> rotate y*-90}
object{torcol2 translate<0,0,-106> rotate y*180}
}
// una sección media con 4 puertas
#declare secm20_10c03=union{
difference {
object{secbacu20}
object{recpuer1 translate<0,0,-101> }
object{recpuer1 translate<0,0,-101> rotate y*90}
object{recpuer1 translate<0,0,-101> rotate y*180}
object{recpuer1 translate<0,0,-101> rotate y*270}
}
object{puerta translate<0,0,-100> }
object{puerta translate<0,0,-100> rotate y*90}
object{puerta translate<0,0,-100> rotate y*180}
object{puerta translate<0,0,-100> rotate y*270}
}
#declare ristra20=union{
#declare cal=0
#declare xa=-87.5
#while(cal!=8)
object{ aspilleraG translate<xa,0,0>}
#declare cal=cal+1
#declare xa=xa+25
#end
}
// sigue declar. de SECCION CIMA BASICA de 5 de alto
#declare secf20_5c=union{
//paredes
box{<-99.8,0,-100>,<99.8,50,-99> texture{texcastle}}
box{<-99.8,0,-100>,<99.8,50,-99> texture{texcastle} rotate y*90}
box{<-99.8,0,-100>,<99.8,50,-99> texture{texcastle} rotate y*-90}
box{<-99.8,0,-100>,<99.8,50,-99> texture{texcastle} rotate y*180}
//techo
box{<-99.8,45,-99.8>,<99.8,50,99.8> texture{texcastle2} rotate x*90}
// la portilla superior
object{portilla translate <0,45,0>}
// siguen las aspilleras
union{
object {ristra20 translate <0,50,-100>}
object {ristra20 translate <0,50,-100> rotate y*90}
object {ristra20 translate <0,50,-100> rotate y*-90}
object {ristra20 translate <0,50,-100> rotate y*180}
}
}
// Casos mas frecuentes para la cima anterior
// en esta sección hay 4 puertas (hay torres colgantes)
#declare secf20_5c05=union{
difference{
object{secf20_5c}
object{recpuer1 translate<0,0,-101> }
object{recpuer1 translate<0,0,-101> rotate y*90}
object{recpuer1 translate<0,0,-101> rotate y*-90}
object{recpuer1 translate<0,0,-101> rotate y*180}
}
object{puerta translate<0,0,-100> }
object{puerta translate<0,0,-100> rotate y*90}
object{puerta translate<0,0,-100> rotate y*-90}
object{puerta translate<0,0,-100> rotate y*180}
}
/* UN EJEMPLO DE UN CASTILLO
//torre redonda de 10 ancho*25 de alto con ventanas usada en torbala
#declare torred25=union{
object{secb10_10r}
object{secm10_10r translate<0,100,0>}
object{secf10_5r translate<0,200,0>}
}
//torre cuadrada de 15 de alto usada en torbala
#declare torcua15=union{
object{secb10_10c}
object{secf10_5c translate<0,100,0>}
}
//torre base lateral de la estructura principal
#declare torbala=union{
object{secb20_10r rotate y*90}
object{secm20_10r translate<0,100,0>} //ventanas
object{secm20_10r01 translate<0,200,0> rotate y*45} //con torcol1
object{secf20_5r05 translate<0,300,0> rotate y*45} //techo con 4 puertas
//se añaden 4 torres torred25 en las esquinas
object{torred25 translate<-100,0,0>}
object{torred25 translate<-100,0,0> rotate y*90}
object{torred25 translate<-100,0,0> rotate y*-90}
object{torred25 translate<-100,0,0> rotate y*180}
// se añaden 4 torres cuadradas intercaladas entre las torres redondas
object{torcua15 translate<-110,0,0> rotate y*45}
object{torcua15 translate<-110,0,0> rotate y*-45}
object{torcua15 translate<-110,0,0> rotate y*(180+45)}
object{torcua15 translate<-110,0,0> rotate y*-(180+45)}
}
//torre redonda de 10 ancho*30 de alto con torres colgantes para intercalar
//entre torbalas
#declare torred30=union{
object{secb10_10r}
object{secm10_5r translate<0,100,0>}
object{secm10_10r02 translate<0,150,0> rotate y*45}
object{secf10_5r05 translate<0,250,0> rotate y*45}
}
//Ahora las definiciones para el grupo central de torres del castillo
//y laterales superiores
#declare torcua25=union{ //torres centinelas de base superior
object{secb10_10c}
object{secm10_10c01 translate <0,100,0>}
object{secf10_5c05 translate <0,200,0>}
}
#declare torcua35=union{ //torres laterales de la estruc. superior princip.
object{secb10_10c}
object{secm10_10c translate<0,100,0>}
object{secm10_10c04 translate <0,200,0>}
object{secf10_5c05 translate <0,300,0>}
}
#declare torred15=union{
object{secb10_10r}
object{secf10_5r translate<0,100,0>}
}
#declare grupsup=union{
object{secb20_10r }
object{secm20_10r translate<0,100,0>}
object{secm20_10r translate<0,200,0>}
object{secm20_10r translate<0,300,0>}
object{secf20_5r translate<0,400,0>}
//las 4 torres laterales del grupo superior
object{torred15 translate<-85,0,-85>}
object{torred15 translate<85,0,-85>}
object{torred15 translate<85,0,-85>}
object{torred15 translate<-85,0,85>}
//las 4 torres intercaladas de 20 metros de altura
object{torcua35 translate<0,0,-120>}
object{torcua35 translate<0,0,-120> rotate y*90}
object{torcua35 translate<0,0,-120> rotate y*-90}
object{torcua35 translate<0,0,-120> rotate y*180}
}
#declare ristra50=union{
#declare cal=0
/* el valor inicial de xa se debe a que la aspillera esta centrada en 0 y va
de -12.50 a 12.50. Asi, si deseamos crear una ristra desde -250 a 250
xa comenzara a 250-12.50=237.50. */
#declare xa=-237.5
#while(cal!=20)
object{ aspilleraG translate<xa,0,0>}
#declare cal=cal+1
#declare xa=xa+25
#end
}
#declare body50_35=union{ //cuerpo cuadrado de 50 ancho*35 alto
box{<-249.8,0,-250>,<249.8,400,-249> texture{texcastle}}
box{<-249.8,0,-250>,<249.8,400,-249> texture{texcastle} rotate y*90}
box{<-249.8,0,-250>,<249.8,400,-249> texture{texcastle} rotate y*-90}
box{<-249.8,0,-250>,<249.8,400,-249> texture{texcastle} rotate y*180}
//techo
box{<-249.8,399,-249.8>,<249.8,400,249.8> texture{texcastle1 rotate x*90}}
object{ristra50 translate<0,400,-250>}
object{ristra50 translate<0,400,-250> rotate y*90}
object{ristra50 translate<0,400,-250> rotate y*-90}
object{ristra50 translate<0,400,-250> rotate y*180}
//4 torres laterales principales en las esquinas del castillo
object{torbala translate<-250,0,-250>}
object{torbala translate<250,0,-250>}
object{torbala translate<-250,0,-250> rotate y*180}
object{torbala translate<250,0,-250> rotate y*180}
//4 torres torred30 usadas entre las torres laterales de la base
object{torred30 translate<0,0,-260>}
object{torred30 translate<0,0,-260> rotate y*90}
object{torred30 translate<0,0,-260> rotate y*-90}
object{torred30 translate<0,0,-260> rotate y*180}
//sigue el grupo de torres superiores
// object{grupsup translate<0,400,0>}
//y las 4 torres laterales superiores
object{torcua25 translate<-240,350,-240>}
object{torcua25 translate<-240,350,-240> rotate y*180}
object{torcua25 translate<240,350,-240>}
object{torcua25 translate<240,350,-240> rotate y*180}
} */